import Datetime from '@/commons/timestamp'
import Strings from '@/commons/strings'

/**
 * 格式化时间 'yyyy/MM/dd'
 * @param {*} val 时间
 * @param {*} fmt 格式
 * @return {string} 时间字符串
 */
export function date(val, fmt) {
    if (val) {
        return Datetime.format(val, fmt);
    } else {
        fmt = '无';
        return fmt;
    }
}

/**
 * 
 * @param {*} value 需格式化的时间
 * @param {*} fmt 格式
 */
export function formatDate(value, fmt) {
    if (!value || value == '无' || value == null) {
        fmt = '无';
        return fmt;
    }
    let getDate = new Date(value)
    let o = {
        'M+': getDate.getMonth() + 1,
        'd+': getDate.getDate(),
        'h+': getDate.getHours(),
        'm+': getDate.getMinutes(),
        's+': getDate.getSeconds(),
        'q+': Math.floor((getDate.getMonth() + 3) / 3),
        'S': getDate.getMilliseconds()
    }
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    for (let k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
        }
    }
    return fmt

}

/**
 * 
 * @param {*} val 需计数的时间
 */
export function days(val, day, text) {
    var value = new Date(val)
    if (text && (day + Datetime.days(value)) < 0) {
        return text + Math.abs(day + Datetime.days(value))
    } else {
        return day + Datetime.days(value)
    }

}

/**
 * 数字格式化 '0,000.00'
 * @param {*} val 数值
 * @param {*} fmt 格式
 * @return {string} 数字字符串
 */
export function num(val, fmt) {
    if (isNaN(val)) { return val }
    var neg = val < 0 ? "-" : "";//正负数
    var fix = Strings.contains(fmt, '.') ? fmt.length - (fmt.indexOf('.') + 1) : 0; //小数点位数
    var sep = Strings.contains(fmt, ',') ? fmt.length - (fix > 0 ? fix + 1 : 0) - (fmt.indexOf(',') + 1) : 0; //大数分隔位数

    var zs = Math.floor(Math.abs(val)), xs = (Math.abs(val) - zs).toFixed(fix);//整数部分,小数部分
    var zs_sp = zs;
    if (sep > 0) {
        var j = (j = String(zs).length) > sep ? j % sep : 0;//取出多余的位数
        zs_sp = (j ? String(zs).substr(0, j) + "," : "") + String(zs).substr(j).replace(RegExp("(\\d{" + sep + "})(?=\\d)", "g"), "$1,");
    }
    return neg + zs_sp + String(xs).substr(1);
}


/**
 * 年龄
 * @param {*} val 时间 yyyy-MM-dd
 * @return {string} 年龄
 */
export function age(val) {
    let birthdays = new Date(val.slice(0, 10).replace(/-/g, "/"));
    let d = new Date();
    let age = d.getFullYear() - birthdays.getFullYear() - ((d.getMonth() < birthdays.getMonth() || (d.getMonth() === birthdays.getMonth() && d.getDate() < birthdays.getDate())) ? 1 : 0);
    return age;
}

/**
 * 指定中文大于len，用...省略号表示，达到美观效果
 * @param {*} val 需格式的中文
 * @param {*} len 需格式的长度
 */
export function txt(val, len) {
    if (val?.length > len) {
        return val.slice(0, len) + "...";
    } else {
        return val;
    }

}

/**
 * 取数据绝对值
 * @param {*} val 手机号
 */
export function abs(val) {
    return isNaN(val) ? 0 : Math.abs(val)
}

/**
 * 脱敏手机号码
 * @param {*} val 手机号
 * @return {string} 手机号码
 */
export function mobile(val) {
    return val.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2");
}


/**
 * 脱敏身份证号
 * @param {*} val 身份证号
 * @return {string} 身份证号
 */
export function idcard(val) {
    if (val) {
        return val.replace(/^(.{4})(?:\d+)(.{4})$/, "$1** **** ****$2");
    }
}





